/*!
    \copyright  Copyright (c) 2024 Qualcomm Technologies International, Ltd.
    All Rights Reserved.
    Qualcomm Technologies International, Ltd. Confidential and Proprietary.
    \file
    \addtogroup media_control_client
    \brief      Media control Profile OTS (Object Transfer Service) - Client Role Implementation.
    @{
*/

#ifndef MEDIA_CONTROL_CLIENT_OTS_DESC_H
#define MEDIA_CONTROL_CLIENT_OTS_DESC_H

#include "media_control_client_private.h"

#ifdef INCLUDE_GATT_OTS_CLIENT_MODULE

/*! Connect OTS for given instance */
void mediaControlClient_OtsConnect(media_control_client_instance_t *instance);

/*! Get OTS attribute for given instance */
void mediaControlClient_GetOtsAttributeHandles(media_control_client_instance_t *instance, GattOtscDeviceData *ots_data);

/*! Handle for confirmation received on OTS initialization */
void mediaControlClient_HandleInitOptServicesCfmForOts(const McpInitOptServicesCfm *message);

/*! Object Retrive by ID: Handle to receive object id. On success, request object contents by id otherwise report failure to application */
void mediaControlClient_HandleTrackObjectIdCfm(const McpGetObjectIdCfm *message);

/*! Object Retrive by ID: Handle to read object contents and send it to application */
void mediaControlClient_HandleObjContentsByObjectIdCfm(const McpGetObjectContentsByObjIdCfm *message);

/*! Discover: Handle for read discoverd object and send it to application */
void mediaControlClient_HandleDiscoverObjectCommonInd(const McpGetObjectMetadataCommonInd *message);

/*! Discover: Handle for retrive discover object procedure status and send it to application */
void mediaControlClient_HandleDiscoverObjectCommonCfm(const McpDiscoverObjectCommonCfm *message);

/*! Media Object Metatdata: Handle to retrive current media object metadata and send it to application */
void mediaControlClient_HandleCurrentMediaObjectMetadata(const McpGetObjectMetadataCommonCfm *message);

/*! Object change indication: Handle for Object change indication confirmation and send it to application */
void mediaControlClient_HandleOtsIndCfm(const McpOtsIndCfm* message);

/*! Object change indication: Handle to receive indication on object create, delete or modify in server */
void mediaControlClient_HandleObjectChangedInd(const McpObjectChangedInd *message);

#else /* INCLUDE_GATT_OTS_CLIENT_MODULE */

#define mediaControlClient_OtsConnect(instance)
#define mediaControlClient_GetOtsAttributeHandles(instance, ots_data)

#endif /* INCLUDE_GATT_OTS_CLIENT_MODULE */

#endif /* MEDIA_CONTROL_CLIENT_OTS_DESC_H */

/*! @} */
